﻿#pragma once

struct FDirection
{
public:
	int x;
	int y;

public:

	static TOWERDEFENCE_API const FDirection none;
	static TOWERDEFENCE_API const FDirection n;
	static TOWERDEFENCE_API const FDirection ne;
	static TOWERDEFENCE_API const FDirection e;
	static TOWERDEFENCE_API const FDirection se;
	static TOWERDEFENCE_API const FDirection s;
	static TOWERDEFENCE_API const FDirection sw;
	static TOWERDEFENCE_API const FDirection w;
	static TOWERDEFENCE_API const FDirection nw;

	static TOWERDEFENCE_API const TArray<FDirection> all;
	static TOWERDEFENCE_API const TArray<FDirection> cardinal;
	static TOWERDEFENCE_API const TArray<FDirection> intercardinal;
	
	FORCEINLINE FDirection(int x, int y);

	bool operator==(const FDirection& other) const;

	bool operator!=(const FDirection& other) const;

public:
	FDirection rotate180();
};